﻿function showProblemStatistics(pid) {
	if (refreshWin('showProblemStatistics' + pid)) return;
	var rankPageSize = 10;
	getProblemStatistics({
				pid : pid,
				success : onload
			});

	function onload(data) {
		var sta_store = new Ext.data.Store({
					autoLoad : true,
					proxy : new Ext.data.MemoryProxy(data.result),
					reader : new Ext.data.JsonReader({
								id : 'code'
							}, ['title', 'code', 'num'])
				});

		var sta_cm = new Ext.grid.ColumnModel([{
					header : 'Status',
					sortable : true,
					dataIndex : 'title',
					renderer : sys.rd.colorstatus
				}, {
					header : 'Count',
					sortable : true,
					dataIndex : 'num',
					width : 50
				}]);

		var sta_grid = new Ext.grid.GridPanel({
					region : 'west',
					width : 350,
					split : true,
					loadMask : {
						msg : '载入中...'
					},
					viewConfig : {
						forceFit : true
					},
					store : sta_store,
					cm : sta_cm
				});

		var chart_store = new Ext.data.Store({
					proxy : new Ext.data.MemoryProxy(data.result),
					reader : new Ext.data.JsonReader({
								id : 'code'
							}, ['title', 'code', 'num'])
				});
		chart_store.load({
					callback : function() {
						chart_store.filterBy(function(record, id) {
									return record.data.code < 20
								})
					}
				});
		var chart = new Ext.chart.PieChart({
					region : 'center',
					store : chart_store,
					dataField : 'num',
					categoryField : 'title',
					series : [{
								style : {
									colors : sys.rd.colors
								}
							}]
				});

		var rank_store = new Ext.data.Store({
					proxy : new Ext.data.HttpProxy({
								url : url.getProblemRanklist
							}),
					reader : new Ext.data.JsonReader({
								root : 'result',
								totalProperty : 'total',
								id : 'rid'
							}, ['rid', 'rank', 'nickname', 'username', 'lang', 'langCode',
									'codeLen', 'allowCode', 'exeTime', 'exeMem', 'submitTime'])
				});
		rank_store.load({
					params : {
						pid : pid,
						start : 0,
						limit : rankPageSize
					}
				});

		var rank_cm = new Ext.grid.ColumnModel([{
					header : 'Rank',
					sortable : false,
					dataIndex : 'rank'
				}, {
					header : 'RID',
					sortable : false,
					dataIndex : 'rid',
					renderer : sys.rd.rid
				}, {
					header : 'Author',
					sortable : false,
					dataIndex : 'username',
					renderer : sys.rd.author
				}, {
					header : 'Language',
					sortable : false,
					dataIndex : 'lang'
				}, {
					header : 'CodeLength',
					sortable : false,
					dataIndex : 'codeLen',
					renderer : sys.rd.codelen
				}, {
					header : 'ExeTime',
					sortable : false,
					dataIndex : 'exeTime',
					renderer : sys.rd.exetime
				}, {
					header : 'ExeMemory',
					sortable : false,
					dataIndex : 'exeMem',
					renderer : sys.rd.exemem
				}, {
					header : 'SubmitTime',
					sortable : false,
					dataIndex : 'submitTime',
					width : 160
				}]);

		var pagebar = new Ext.PagingToolbar({
					pageSize : rankPageSize,
					store : rank_store,
					displayInfo : true,
					emptyMsg : '当前没有用户通过此题。',
					displayMsg : '当前显示第 {0} - {1} 名，共 {2} 名用户通过此题。',
					plugins : new Ext.ux.SlidingPager()
				});

		var rank_grid = new Ext.grid.GridPanel({
					title : '<center>用户排名</center>',
					region : 'center',
					loadMask : {
						msg : '载入中...'
					},
					viewConfig : {
						forceFit : true
					},
					store : rank_store,
					cm : rank_cm,
					bbar : pagebar
				});

		var win = new Ext.Window({
					id : 'showProblemStatistics' + pid,
					title : '题目统计 - ' + pid,
					iconCls : 'statistics-icon',
					layout : 'border',
					manager : ui.windows,
					width : 700,
					height : 500,
					minWidth : 600,
					minHeight : 400,
					items : [{
								region : 'north',
								layout : 'border',
								height : 200,
								border : false,
								split : true,
								collapsible : true,
								hideCollapseTool : true,
								collapseMode : 'mini',
								items : [sta_grid, chart]
							}, rank_grid]
				});
		win.show();
	}
}

function getProblemStatistics(obj) {
	ajax({
				url : url.getProblemStatistics,
				params : {
					pid : obj.pid
				},
				success : obj.success
			});
}